home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1995-08-15 | 38.7 KB | 1,092 lines
'************************************************************ '$INCLUDE 'setupapi.inc' '$INCLUDE 'mscpydis.inc' '$INCLUDE 'msdetect.inc' '$DEFINE DEBUG ''Define for script development/debugging ''Dialog ID's CONST WELCOME = 100 CONST ASKQUIT = 200 CONST DESTPATH = 300 CONST EXITFAILURE = 400 CONST EXITQUIT = 600 CONST EXITSUCCESS = 700 CONST OPTIONS = 800 CONST APPHELP = 900 CONST APPHELP2 = 1500 CONST APPHELP3 = 1700 CONST CHECK = 2500 CONST TOOBIG = 6300 CONST BADPATH = 6400 CONST REGANDREAD = 6500 CONST DESTGRP = 6600 CONST VERPATH = 1100 CONST EXITFAILNOTWIN31 = 1200 CONST EXITFAILNOTENH = 1300 CONST EXITFAILNOTPAGING = 1325 CONST EXITFAILNOTINTEL = 1350 CONST EXITFAILRUNAPP = 1360 CONST RESTARTII = 2700 CONST FINALEXIT = 1000 CONST WINGWELCOME = 100 CONST WINGASKQUIT = 200 CONST WINGDESTPATH = 300 CONST WINGDESTPATH2 = 301 CONST WINGEXITFAILURE = 400 CONST WINGEXITQUIT = 600 CONST WINGEXITSUCCESS = 700 CONST WINGAPPHELP = 900 CONST WINGCHECK = 2500 CONST WINGBADPATH = 6400 CONST RESTART = 1000 ''Bitmap ID CONST LOGO = 1 CONST WINGLOGO = 1 ''Disk Sizes 'GLOBAL File1 'GLOBAL File2 GLOBAL WantedDiskSize& ''File Types GLOBAL DEST$ GLOBAL WINDRIVE$ GLOBAL OPTCUR$ GLOBAL CHECKSTATES$ GLOBAL RUNTIME$ GLOBAL AVITOOLS$ GLOBAL MDKTOOLS$ GLOBAL TOOLS$ CONST WING_RUNFILES = 1 CONST WING_BUILDFILES = 2 GLOBAL FILEDIALOG GLOBAL WINGDEST$ GLOBAL WINGCHECKSTATES$ GLOBAL TMPDEST$ GLOBAL bInstallDVA% SrcDir$ = GetSymbolValue("STF_SRCDIR") WinDir$ = GetWindowsDir() WinSysDir$ = GetWindowsSysDir() GLOBAL DESTWIN$ ''Windows directory. GLOBAL DESTSYS$ ''Windows\System directory. GLOBAL DEST32S$ ''Windows\System\Win32s directory GLOBAL DESTFREE$ ''Freecell directory GLOBAL OLE_PROTECT% ''Indicates whether ole2 dlls were protected from being '' copied. GLOBAL OLE_OLEBOOT% GLOBAL VERNUM$ '' Win32s Version Number (i.e., for v1.25 VERNUM$="125" DECLARE FUNCTION MakeSystemIni LIB "INIUPD.DLL" (arg1$, arg2$) AS INTEGER DECLARE SUB RecoverFromCopy(szFileName$) DECLARE SUB WriteLine LIB "INIUPD.DLL" (filename$, text$) DECLARE FUNCTION GetTempFileName LIB "KRNL386.EXE" (drive%, prefix$, u%, filename$) AS INTEGER DECLARE FUNCTION GetTempFileAt(szDir$, szPrefix$) as string DECLARE FUNCTION LoadLibrary LIB "KRNL386.EXE" (arg1$) AS INTEGER DECLARE SUB FreeLibrary LIB "KRNL386.EXE" (arg1%) DECLARE FUNCTION SetErrorMode LIB "KRNL386.EXE" (arg1%) AS INTEGER DECLARE SUB UpdateSystemIni DECLARE FUNCTION ShareEnabled LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION PagingEnabled LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION IsWin32sLoaded LIB "INIUPD.DLL" (arg1$) AS INTEGER DECLARE FUNCTION GetModuleHandle LIB "KRNL386.EXE" (arg1$) AS INTEGER DECLARE FUNCTION IsRunningApp LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION OnWindowsNT LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION ExitWindowsExec LIB "user.exe" (Exec$, Param$) AS INTEGER DECLARE FUNCTION WinGMakePath (szDir$, szFile$) AS STRING DECLARE FUNCTION GetRealWindowsSysDir AS STRING DECLARE SUB Install(OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%) DECLARE SUB UpdateWinG32 (szOrig$) DECLARE FUNCTION OnWin3x LIB "setuphlp.DLL" AS INTEGER DECLARE FUNCTION VflatdPresent LIB "setuphlp.DLL" AS INTEGER DECLARE FUNCTION GetRealSystemDir LIB "setuphlp.DLL" (szDir$,cbBuf%) AS INTEGER DECLARE FUNCTION RestartWindows LIB "setuphlp.DLL" AS INTEGER DECLARE FUNCTION IsWin32FileNewer LIB "setuphlp.DLL" (szOrig$,szNew$) AS INTEGER DECLARE SUB RenameFilePlease LIB "setuphlp.DLL" (szOrig$,szNew$) DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING '************************************************************ '************************************************************ ' Product Specific Variables GLOBAL MAIN_WINDOW_TITLE$ GLOBAL DESTINATION_GROUP$ GLOBAL PRODUCT_TITLE$ GLOBAL PRODUCTE_EXEC_NAME$ GLOBAL README_FILE_NAME$ GLOBAL CD_HOME_STRING$ GLOBAL PRODUCT_HARD_DRIVE_REQUIREMENT& '************************************************************ '************************************************************ ' START '************************************************************ WINGINIT: '************************************************************ 'Program specific changes. Hopefully all will be moved into here. ' Win32s Setup Test ' MAIN_WINDOW_TITLE$ = "Win32s Setup Test + Lunar Fox" ' Title you wish to appear at the top of all the setup windows ' DESTINATION_GROUP$ = "Corel CD Home" ' Windows group you wish to create or add this product to, also start directory on hard drive ' PRODUCT_TITLE$ = "Win32S Setup Test" ' Product title as it should appear on the icon, readme, etc. ' PRODUCT_EXEC_NAME$ = "lunarfox" ' Product executable filename, used for icon, sub directory, etc. ' README_FILE_NAME$ = "\readme.cwb" ' Readme filename and file type for this product ' CD_HOME_STRING$ = "cdhome" ' Group name and ini file name. ' PRODUCT_HARD_DRIVE_REQUIREMENT &= 4000000 ' Space need on hard drive for all product install files. ' Wild Board ' MAIN_WINDOW_TITLE$ = "Corel Wild Board Games Installation" ' Title you wish to appear at the top of all the setup windows ' DESTINATION_GROUP$ = "Corel CD Home" ' Windows group you wish to create or add this product to, also start directory on hard drive ' PRODUCT_TITLE$ = "Wild Board Games" ' Product title as it should appear on the icon, readme, etc. ' PRODUCT_EXEC_NAME$ = "wildgame" ' Product executable filename, used for icon, sub directory, etc. ' README_FILE_NAME$ = "\readme.cwb" ' Readme filename and file type for this product ' CD_HOME_STRING$ = "cdhome" ' Group name and ini file name. ' PRODUCT_HARD_DRIVE_REQUIREMENT &= 16000000 ' Space need on hard drive for all product install files. ' Corel Arcade Mania MAIN_WINDOW_TITLE$ = "Corel Arcade Mania Installation" ' Title you wish to appear at the top of all the setup windows DESTINATION_GROUP$ = "Corel CD Home" ' Windows group you wish to create or add this product to, also start directory on hard drive PRODUCT_TITLE$ = "Arcade Mania" ' Product title as it should appear on the icon, readme, etc. PRODUCT_EXEC_NAME$ = "cam1" ' Product executable filename, used for icon, sub directory, etc. README_FILE_NAME$ = "\readme.am1" ' Readme filename and file type for this product CD_HOME_STRING$ = "cdhome" ' Group name and ini file name. PRODUCT_HARD_DRIVE_REQUIREMENT &= 10000000 ' Space need on hard drive for all product install files. '************************************************************ bInstallDVA% = 0 WINGCUIDLL$ = "wingcui.dll" ''Custom wing interface dll WINGHELPPROC$ = "FHelpDlgProc" ''Help dialog procedure CUIDLL$ = "mscuistf.dll" ''Custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure WIN32ENABLED% = 0 OLEONLY% = 0 OLE2_16% = 0 OLE2AUTO_16% = 0 OLE16RUNAPP% = 0 OLE_PROTECT% = 0 OLE_OLEBOOT% = 0 ON ERROR GOTO ERRNORMAL DESTWIN$ = GetWindowsDir() DESTSYS$ = GetWindowsSysDir() DEST32S$ = DESTSYS + "WIN32S\" SetBitmap WINGCUIDLL$, WINGLOGO SetTitle MAIN_WINDOW_TITLE$ szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + "setup.inf" END IF ReadInfFile szInf$ WINGWELCOME: WINGCHECK: WELCOME: SetRestartDir GetWindowsDir() SrcDir$ = GetSymbolValue("STF_SRCDIR") WINGDEST$ = GetWindowsSysDir ' ======== ' Adding test for space needed for WinG ClearCopyList WantedDiskSize&=400000 WINDRIVE$ = MID$(WinDir$, 1, 1) DiskSize&=GetFreeSpaceForDrive(WINDRIVE$) If WantedDiskSize& > DiskSize& then GOTO WING_SPACE_ERROR EndIf ' ======== AddSectionFilesToCopyList "runtime", SrcDir$, WINGDEST$ IF OnWin3x() = 1 THEN AddSectionFilesToCopyList "dva", SrcDir$, WINGDEST$ IF VflatdPresent() = 0 THEN CreateSysIniKeyValue GetWindowsDir + "system.ini", "386Enh", "device", GetWindowsSysDir+"dva.386", cmoOverwrite bInstallDVA% = 1 END IF END IF GETPATH: WINDRIVE$ = MID$(WinDir$, 1, 1) cdromdrive$ = MID$(SrcDir$, 1, 3) DEST$ = WINDRIVE$ + ":\"+CD_HOME_STRING$+"\" + PRODUCT_EXEC_NAME$ SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$) DEST$ = GetSymbolValue("EditTextOut") IF sz$ = "CONTINUE" THEN IF IsDirWritable(DEST$) = 0 THEN GOSUB BADPATH GOTO GETPATHL1 END IF UIPop 1 ELSEIF sz$ = "REACTIVATE" THEN GOTO GETPATHL1 ELSEIF sz$ = "BACK" THEN UIPop 1 GOTO WELCOME ELSE GOSUB ASKQUIT GOTO GETPATH END IF WINGDEST$ = GetRealWindowsSysDir AddSectionFilesToCopyList "wing32", SrcDir$, WINGDEST$ Dest1$ = WinGMakePath(WINGDEST$,"wing32.dll") Dest2$ = WinGMakePath(WINGDEST$,"wing32.xxx") RenameFilePlease Dest1$,Dest2$ CopyFilesInCopyList UpdateWinG32 GetRealWindowsSysDir() WINGQUIT: ON ERROR GOTO WINGERRQUIT IF ERR = 0 THEN dlg% = WINGEXITSUCCESS ELSEIF ERR = STFQUIT THEN dlg% = WINGEXITQUIT ELSE dlg% = WINGEXITFAILURE END IF WINGQUITL1: GOTO INIT sz$ = UIStartDlg(WINGCUIDLL$, dlg%, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO WINGQUITL1 END IF UIPop 1 END WINGERRQUIT: i% = DoMsgBox(PRODUCT_TITLE$+" was not installed correctly!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND) END WINGASKQUIT: sz$ = UIStartDlg(WINGCUIDLL$, WINGASKQUIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN UIPopAll ERROR STFQUIT ELSEIF sz$ = "REACTIVATE" THEN GOTO WINGASKQUIT ELSE UIPop 1 END IF RETURN '************************************************************ ERRQUIT: i% = DoMsgBox("Setup sources were corrupted!", "Setup Problem", MB_OK+MB_TASKMODAL+MB_ICONHAND) END '************************************************************ '************************************************************ ASKQUIT: sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN UIPopAll '' ERROR STFQUIT END ELSEIF sz$ = "REACTIVATE" THEN GOTO ASKQUIT ELSE UIPop 1 END IF RETURN '************************************************************ '************************************************************ TOOBIG: sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO TOOBIG END IF UIPop 1 RETURN '************************************************************ '************************************************************ BADPATH: sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO BADPATH END IF UIPop 1 RETURN '************************************************************ '************************************************************ FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING IF szDir$ = "" THEN MakePath = szFile$ ELSEIF szFile$ = "" THEN MakePath = szDir$ ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN MakePath = szDir$ + szFile$ ELSE MakePath = szDir$ + "\" + szFile$ END IF END FUNCTION '************************************************************ '************************************************************ '' Bypass run-time errors. Let final dialog box display fatal error message. ERRNORMAL: '' Check if user cancelled setup IF ERR = STFQUIT THEN GOTO QUIT END IF RESUME NEXT '************************************************************ '************************************************************************* SUB Install(OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%) STATIC SrcDir$ = GetSymbolValue("STF_SRCDIR") '' Use file layout sections that specify OLDER file version/time check IF OLEONLY% = 0 THEN AddSectionFilesToCopyList "WindowsSystem", SrcDir$, DESTSYS$ AddSectionFilesToCopyList "WindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\" '' Add obsolete files to be removed AddSectionFilesToCopyList "Win32sSystemObsoleteFiles", SrcDir$, DESTSYS$ + "WIN32S\" END IF OLE_PROTECT% = 0 OLEINCLUDED% = DoesFileExist( GetSymbolValue("STF_SRCDIR") + "OLE2THK.DL_", femExists ) if OLEINCLUDED% = 1 THEN IF (OLE2_16% = 1) OR (OLE2AUTO_16% = 1) THEN IF OLE16RUNAPP% = 1 THEN '' Force all OLE2 DLLS to be copied during reboot. i% = SetErrorMode(-32768) i% = LoadLibrary(DESTSYS$ + "compobj.dll") i% = LoadLibrary(DESTSYS$ + "ole2.dll") i% = LoadLibrary(DESTSYS$ + "ole2prox.dll") i% = LoadLibrary(DESTSYS$ + "ole2conv.dll") i% = LoadLibrary(DESTSYS$ + "storage.dll") i% = LoadLibrary(DESTSYS$ + "ole2nls.dll") i% = LoadLibrary(DESTSYS$ + "ole2disp.dll") i% = LoadLibrary(DESTSYS$ + "typelib.dll") OLE_PROTECT% = 1 END IF AddSectionFilesToCopyList "OleWindowsSystem", SrcDir$, DESTSYS$ END IF IF OLE2_32% = 1 THEN AddSectionFilesToCopyList "OleWindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\" END IF IF (OLE2_16% = 1) OR (OLE2_32% = 1) OR (OLE2AUTO_16% = 1) THEN AddSectionFilesToCopyList "Ole2RegWindowsSystem", SrcDir$, DESTSYS$ END IF IF (OLE2AUTO_16% = 1) THEN AddSectionFilesToCopyList "StdoleWindowsSystem", SrcDir$, DESTSYS$ IF (OLE16RUNAPP and DoesFileExist(DESTSYS$ + "stdole.tlb", femExists) ) THEN ' copy stdole.tlb -> tempfile1 stdole1$ = DESTSYS$ + GetTempFileAt(DESTSYS$, "STD") CopyFile DESTSYS$+"STDOLE.TLB", stdole1$, cmoOverwrit, 0 OLE_OLEBOOT% = 1 ENDIF END IF END IF ' mmh - alan - fix for bug found (Tue 07-18-1995), leave this line in, do NOT comment it out CopyFilesInCopyList IF (OLEINCLUDED% = 1) THEN RecoverFromCopy DESTSYS$ + "compobj.dll" RecoverFromCopy DESTSYS$ + "ole2.dll" RecoverFromCopy DESTSYS$ + "ole2prox.dll" RecoverFromCopy DESTSYS$ + "ole2conv.dll" RecoverFromCopy DESTSYS$ + "storage.dll" RecoverFromCopy DESTSYS$ + "ole2nls.dll" RecoverFromCopy DESTSYS$ + "ole2disp.dll" RecoverFromCopy DESTSYS$ + "typelib.dll" END IF IF (OLE_PROTECT% = 1) THEN '' Free all previously loaded libraries FreeLibrary GetModuleHandle("compobj") FreeLibrary GetModuleHandle("ole2") FreeLibrary GetModuleHandle("ole2prox") FreeLibrary GetModuleHandle("ole2conv") FreeLibrary GetModuleHandle("storage") FreeLibrary GetModuleHandle("ole2nls") FreeLibrary GetModuleHandle("ole2disp") FreeLibrary GetModuleHandle("typelib") OLE_PROTECT% = 0 END IF IF (OLE_OLEBOOT% = 1) THEN 'rename new stdole.tlb -> tempfile2 stdole2$ = GetTempFileAt(DESTSYS$, "STD") RemoveFile DESTSYS$+stdole2$, cmoForce RenameFile DESTSYS$+"STDOLE.TLB" , stdole2$ 'rename tempfile1 -> stdole.tlb RenameFile stdole1$, "STDOLE.TLB" 'write to _mssetup.bat: rename tempfile2 to stdole.tlb WriteLine DESTWIN$+"_MSSETUP.BAT", "" WriteLine DESTWIN$+"_MSSETUP.BAT", "DEL "+DESTSYS$+"STDOLE.TLB" WriteLine DESTWIN$+"_MSSETUP.BAT", "REN "+DESTSYS$+stdole2$+" STDOLE.TLB" ENDIF IF OLEINCLUDED% AND (OLE2_16% OR OLE2_32% OR OLE2AUTO_16%) THEN IF OLE16RUNAPP% THEN reg1$ = DESTWIN$ + GetTempFileAt(DESTWIN$, "REG") CopyFile DESTWIN$+"REG.DAT", reg1$, cmoOverwrit, 0 ENDIF RUN "regedit /s " + DESTSYS$ + "ole2.reg" IF OLE16RUNAPP% THEN reg2$ = GetTempFileAt(DESTWIN$, "REG") RemoveFile DESTWIN$ + reg2$, cmoForce RenameFile DESTWIN$ + "REG.DAT" , reg2$ 'rename tempfile1 -> reg.dat RenameFile reg1$, "REG.DAT" 'write to _mssetup.bat: rename tempfile2 to reg.dat WriteLine DESTWIN$+"_MSSETUP.BAT", "" WriteLine DESTWIN$+"_MSSETUP.BAT", "DEL "+DESTWIN$+"REG.DAT" WriteLine DESTWIN$+"_MSSETUP.BAT", "REN "+DESTWIN$ + reg2$+" REG.DAT" OLE_OLEBOOT% = 1 ENDIF END IF END SUB SUB UpdateSystemIni STATIC VxDPath$ = DEST32S$ + "W32S.386" SystemIniPath$ = GetWindowsDir() t% = MakeSystemIni(SystemIniPath$, VxdPath$) END SUB '************************************************************************* '************************************************************************* SUB RecoverFromCopy(szFileName$) STATIC IF DoesFileExist(szFileName$, femExist) = 0 THEN szBackFile$ = MID$(szFileName$, 1, LEN(szFileName$)-3) + VERNUM$ IF DoesfileExist(szBackFile$, femExist) = 0 THEN i% = DoMsgBox("ERROR: Could not find backup file "+szBackfile$, "Setup Error", MB_ICONEXLAMATION + MB_OK) ELSE CopyFile szBackFile$, szFileName$, cmoTimeStamp, 0 END IF END IF END SUB '************************************************************************* '************************************************************************* FUNCTION GetTempFileAt(szDir$, szPrefix$) STATIC AS STRING szCurDir$ = CURDIR$ CHDIR szDir$ + "." szTempFile$ = STRING$(144, "E") i% = GetTempFileName(TF_FORCEDRIVE, szPrefix$,0, szTempFile$) CHDIR szCurDir$ GetTempFileAt = MID$(szTempFile$,3) END FUNCTION '************************************************************************* '************************************************************************* MIKE_TEST1: sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "") UIPop 1 RETURN '************************************************************************* '************************************************************************* MIKE_TEST2: sz$ = UIStartDlg(CUIDLL$, RESTART, "FInfo0DlgProc", 0, "") UIPop 1 RETURN '************************************************************************* '************************************************************ FUNCTION WinGMakePath (szDir$, szFile$) STATIC AS STRING IF szDir$ = "" THEN WinGMakePath = szFile$ ELSEIF szFile$ = "" THEN WinGMakePath = szDir$ ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN WinGMakePath = szDir$ + szFile$ ELSE WinGMakePath = szDir$ + "\" + szFile$ END IF END FUNCTION '************************************************************ '************************************************************ FUNCTION GetRealWindowsSysDir STATIC AS STRING szBuf$ = string$(260, 32) cbBuf% = GetRealSystemDir(szBuf$, 260) IF cbBuf% = 0 THEN ERROR STFERR ELSE IF cbBuf% > 259 THEN res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK) ERROR STFERR END IF szBuf$ = RTRIM$(szBuf$) IF MID$(szBuf$, 1, 1) = "\" THEN szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$ ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$ END IF IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN szBuf$ = szBuf$ + "\" END IF GetRealWindowsSysDir = szBuf$ END IF szBuf$ = "" END FUNCTION '************************************************************ '************************************************************ SUB UpdateWinG32 (szOrig$) STATIC ' ' Here we check the version ourselves of wing32.dll, since ' we can't get version checking for Win32 apps from Win16 ' FileNew$ = WinGMakePath(szOrig$, "wing32.dll") FileOrig$ = WinGMakePath(szOrig$, "wing32.xxx") IF IsWin32FileNewer( FileOrig$, FileNew$ ) THEN RemoveFile FileOrig$, cmoForce ELSE RemoveFile FileNew$, cmoForce ' get rid of new file RenameFilePlease FileOrig$,FileNew$ ' put back old file END IF END SUB '************************************************************ '************************************************************ INIT: ClearCopyList CUIDLL$ = "mscuistf.dll" ''Custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure MajorVer% = GetWindowsMajorVersion() MinorVer% = GetWindowsMinorVersion() IF MajorVer% < 3 OR (MajorVer% = 3 AND MinorVer% < 10) THEN i% = DoMsgBox("Microsoft Windows version 3.10 or greater is required for this software. Please upgrade your version of Windows.", "Installation Problem", MB_OK+MB_TASKMODAL+MB_ICONHAND) END END IF SetBitmap CUIDLL$, LOGO SetTitle MAIN_WINDOW_TITLE$ szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF" END IF ReadInfFile szInf$ ClearCopyList WantedDiskSize&=1689000 DiskSize&=GetFreeSpaceForDrive(WINDRIVE$) If WantedDiskSize& > DiskSize& then GOSUB TOOBIG ERROR STFQUIT EndIf '' Setting Video for Windows RUNTIME files to be copied AddSectionFilesToCopyList "VfW Runtime", SrcDir$, WinSysDir$ AddSectionFilesToCopyList "OLE2", SrcDir$, WinSysDir$ AddSectionFilesToCopyList "ACM Drivers", SrcDir$, WinSysDir$ AddSectionFilesToCopyList "MPlayer", SrcDir$, WinDir$ AddSectionFilesToCopyList "AVICodecs", SrcDir$, WinSysDir$ AddSectionFilesToCopyList "Indeo-ini", SrcDir$, WinDir$ CopyFilesInCopyList ''Updating WIN.INI and SYSTEM.INI IF VflatdPresent() = 0 THEN CreateSysIniKeyValue WinDir$ + "system.ini", "386Enh", "device", "dva.386", cmoOverwrite END IF CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.CVID", "iccvid.drv", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.MSVC", "msvidc.drv", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.IV31", "indeov.drv", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.MRLE", "MSRLE.drv", cmoOverwrite I% = DoesIniKeyExist ("system.ini", "Drivers", "VIDC.RT21") IF I% = 0 THEN CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.RT21", "indeov.drv", cmoOverwrite END IF CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.YVU9", "indeov.drv", cmoOverwrite CreateIniKeyValue WinDir$ + "WIN.INI", "mci extensions", "avi", "AVIVideo", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "mci", "AVIVideo", "mciavi.drv", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "WaveMapper", "msacm.drv", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "MSACM.msadpcm", "msadpcm.acm", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "MSACM.imaadpcm", "imaadpcm.acm", cmoOverwrite CreateIniKeyValue WinDir$ + "control.ini", "drivers.desc", "msacm.drv", "Microsoft Sound Mapper V2.00", cmoOverwrite CreateIniKeyValue WinDir$ + "control.ini", "drivers.desc", "msadpcm.acm", "Microsoft ADPCM Codec V2.00", cmoOverwrite CreateIniKeyValue WinDir$ + "control.ini", "drivers.desc", "imaadpcm.acm", "Microsoft IMA ADPCM Codec V2.00", cmoOverwrite Run ("regedit.exe /s " + MakePath(WinDir$, "mplayer.reg")) Run ("regedit.exe /s " + MakePath(WinSysDir$, "OLE2.reg")) Run ("regedit.exe /s " + MakePath(WinSysDir$, "cleanup.reg")) ' *********************************** ' Add Win32s files and code here. ' { ' MIKE '' Check that we are not runnig on Chicago, including pre-released '' Chicago versions. IF GetWindowsMajorVersion * 100 + GetWindowsMinorVersion > 350 THEN ExitCode% = EXITSUCCESS WIN32ENABLED% = 1 GOTO WIN32S_QUIT END IF IF GetWindowsMode < 2 THEN IF OnWindowsNT() THEN ExitCode% = EXITFAILNOTINTEL '' Running on Windows NT (on RISC) ELSE ExitCode% = EXITFAILNOTENH '' Standard Mode Windows END IF GOTO WIN32S_QUIT END IF IF OnWindowsNT() THEN ExitCode% = EXITSUCCESS WIN32ENABLED% = 1 GOTO WIN32S_QUIT END IF ExitCode% = EXITSUCCESS if IsRunningApp() <> 0 THEN ExitCode% = EXITFAILRUNAPP GOTO WIN32S_QUIT END IF '' Get version of Win32s to be installed from version info in INF file szNewVer$ = GetSectionKeyVersion("WindowsSystem", "win32s16") '' See if OLE is included. OLEINCLUDED% = DoesFileExist( GetSymbolValue("STF_SRCDIR") + "OLE2THK.DL_", femExists ) IF OLEINCLUDED% = 1 THEN '' See whether one of the OLE 16 bit components is loaded. IF GetModulehandle("compobj") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("ole2") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("ole2prox") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("ole2conv") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("storage") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("ole2nls") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("ole2disp") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF IF GetModuleHandle("typelib") <> 0 THEN OLE16RUNAPP% = 1 GOTO GetOleVersion END IF GetOleVersion: szOleNewVer$ = GetSectionKeyVersion("OleWindowsSystemWin32s", "ole2thk") '' Get version of currently installed OLE32 from version info of '' ole2thk file szOleOldVer$ = GetVersionOfFile( DESTSYS$ + "WIN32S\OLE2THK.DLL" ) szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "COMPOBJ.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "compobj") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2PROX.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2prox") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "STORAGE.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "storage") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2CONV.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2conv") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2NLS.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2nls") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2AUTO_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2DISP.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2disp") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2AUTO_16% = 1 END IF szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "TYPELIB.DLL" ) szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "typelib") IF (szOle16NewVer$ > szOle16OldVer$) THEN OLE2AUTO_16% = 1 END IF END IF OLE2_32% = OLEINCLUDED% '' Check if Win32s is partially installed sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "Win32s", "Setup") '' If WIN32S.INI specifies Win32s Setup=0, then force complete Win32s file overwrite IF sz$ = "0" THEN GOTO WIN32S_WELCOME END IF '' If WIN32S.INI is missing, try and reinstall Win32s files/recreate WIN32S.INI IF sz$ <> "1" THEN GOTO WIN32S_WELCOME END IF '' If Win32s is already installed, get running version number i% = DoesFileExist( DESTSYS$ + "W32SYS.DLL", femExists ) IF i% = 1 THEN i% = IsWin32sLoaded( szOldVer$ ) ENDIF IF i% = 0 THEN GOTO WIN32S_WELCOME END IF IF szNewVer$ > szOldVer$ THEN GOTO WIN32S_WELCOME END IF IF OLEINCLUDED% = 1 THEN OLE2_32% = 0 IF (szNewVer$ = szOldVer$) OR (szNewVer$ < szOldVer$) THEN '' Compare OLE32 version and versions of each of OLE16 libraries. sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "OLE", "Setup") '' If WIN32S.INI specifies OLE2 Setup=0, then force OLE2 file overwrite IF ((sz$ <> "1") OR (szOleNewVer$ > szOleOldVer$)) THEN OLEONLY% = 1 OLE2_32% = 1 GOTO WIN32S_WELCOME END IF IF OLE2_16% OR OLE2AUTO_16 THEN OLEONLY% = 1 GOTO WIN32S_WELCOME END IF END IF END IF WIN32ENABLED% = 1 GOTO WIN32S_QUIT WIN32S_WELCOME: GETWIN32SPATH: IF PagingEnabled() = 0 THEN i% = DoMsgBox("Use the Control Panel 386 Enhanced icon and configure Windows using the Virtual Memory option.", "Win32s requires Virtual Memory", MB_TASKMODAL+MB_ICONHAND+MB_OK) ExitCode% = EXITFAILURE '' Enhanced mode but not paging GOTO WIN32S_QUIT END IF IF ShareEnabled() = 0 THEN i% = DoMsgBox( "File-sharing must be enabled. Run SHARE.EXE before starting Windows or add SHARE.EXE to your AUTOEXEC.BAT file.", "Win32s Setup: SHARE.EXE is not loaded", MB_TASKMODAL+MB_ICONEXCLAMATION+MB_OK) END IF SetSymbolValue "EditTextIn", DESTSYS$ SetSymbolValue "EditFocus", "END" WIN32S_GETPATHL1: DESTSYS$ = GetWindowsSysDir COPYFILES: IF OLEONLY% = 0 THEN CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite END IF IF OLE2_32% = 1 THEN CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "0", cmoOverwrite END IF '' Indicate Win32s install failure until all files known to be copied. ExitCode% = EXITFAILURE ERR = 0 CreateDir DEST32S$, cmoNone Install OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP% UpdateSystemIni '' Terminate if unhandled fatal error IF ERR <> 0 THEN GOTO WIN32S_QUIT END IF IF OLEONLY% = 0 THEN CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "1", cmoOverwrite CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Version", szNewVer$, cmoOverwrite CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Nls", "AnsiCP", "1252", cmoOverwrite END IF IF OLE2_32% = 1 THEN CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "1", cmoOverwrite CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Version", szOleNewVer, cmoOverwrite END IF WIN32S_QUIT: '' Install error handler for final message box routines ON ERROR GOTO ERRQUIT IF ERR = 0 THEN dlg% = ExitCode% ELSEIF ERR = STFQUIT THEN IF (OLE_PROTECT% = 1) THEN '' Free all previously loaded libraries FreeLibrary GetModuleHandle("compobj") FreeLibrary GetModuleHandle("ole2") FreeLibrary GetModuleHandle("ole2prox") FreeLibrary GetModuleHandle("ole2conv") FreeLibrary GetModuleHandle("storage") FreeLibrary GetModuleHandle("ole2nls") FreeLibrary GetModuleHandle("ole2disp") FreeLibrary GetModuleHandle("typelib") END IF dlg% = EXITQUIT ExitCode% = EXITQUIT ELSE dlg% = EXITFAILURE ExitCode% = EXITQUIT END IF WIN32S_QUITL1: ' IF WIN32ENABLED% = 1 THEN ' UIPop 1 ' END ' END IF ' sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "") ' IF sz$ = "REACTIVATE" THEN ' GOTO WIN32S_QUITL1 ' END IF UIPop 1 ' IF ExitCode% = EXITSUCCESS THEN ' IF RebootSystem(OLEONLY% and not OLE_OLEBOOT%) = 0 THEN ' CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite ' IF OLE2_32% = 1 THEN ' CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "0", cmoOverwrite ' END IF ' i% = DoMsgBox("Win32s is not properly configured and Win32s Setup must be run again.", "Unable to Restart Windows", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL) ' END IF ' ENDIF ' END ' End of Win32s Install portion ' } ' *********************************** DO_PROGRAM_FILES: CreateDir DEST$, cmoNone DESTDRIVE$ = MID$(DEST$, 1, 1) ClearCopyList AddSectionFilesToCopyList "product_files", SrcDir$, DEST$ ' Set to hard drive space neede for program WantedDiskSize&=PRODUCT_HARD_DRIVE_REQUIREMENT& DiskSize&=GetFreeSpaceForDrive(DESTDRIVE$) If WantedDiskSize& > DiskSize& then GOSUB TOOBIG ERROR STFQUIT EndIf CopyFilesInCopyList ' Autorun feature, Win95 CreateIniKeyValue WinDir$ + CD_HOME_STRING$+".ini", PRODUCT_EXEC_NAME$, "dir", DEST$, cmoOverwrite ' Run video for Windows Profiler Run ("profdisp.exe") ' Set up program group and icon GETGROUP: DESTGROUP$ = DESTINATION_GROUP$ SetSymbolValue "EditTextIn", DESTGROUP$ SetSymbolValue "EditFocus", "END" GETGROUPL1: sz$ = UIStartDlg(CUIDLL$, DESTGRP, "FEditDlgProc", 0, "") DESTGROUP$ = GetSymbolValue("EditTextOut") IF sz$ = "CONTINUE" THEN IF DESTGROUP = "" OR DESTGROUP = " " OR DESTGROUP = " " OR DESTGROUP = " " THEN GOTO GETGROUPL1 END IF UIPop 1 ELSEIF sz$ = "REACTIVATE" THEN GOTO GETGROUPL1 ELSE GOSUB ASKQUIT GOTO GETGROUP END IF CreateProgmanGroup DESTGROUP$, "", cmoNone ShowProgmanGroup DESTGROUP$, 1, cmoNone CreateProgmanItem DESTGROUP$, PRODUCT_TITLE$, DEST$+"\"+PRODUCT_EXEC_NAME$+".exe" , "", cmoOverwrite CreateProgmanItem DESTGROUP$, PRODUCT_TITLE$+" Read Me", "notepad.exe "+DEST$+README_FILE_NAME$ , "", cmoOverwrite '************************************************************ '************************************************************ QUIT: ON ERROR GOTO ERRQUIT IF ERR = 0 THEN dlg% = EXITSUCCESS ELSEIF ERR = STFQUIT THEN dlg% = EXITQUIT ELSE dlg% = EXITFAILURE END IF QUITL1: sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO QUITL1 END IF UIPop 1 sz$ = UIStartDlg(CUIDLL$, REGANDREAD, "FInfoDlgProc", 0, "") UIPop 1 IF sz$ = "CONTINUE" THEN Run("notepad.exe "+DEST$+README_FILE_NAME$) ENDIF '************************************************************ '************************************************************ RESTARTWINDOWS: ' DEST$ = GetSymbolValue("EditTextOut") ' GOSUB MIKE_TEST1 ' With this commented out it seems to work but do I really want to do this ' SetRestartDir DEST$ ' SetRestartDir GetWindowsDir() RESTRT% = RestartListEmpty () Exe$ = GetWindowsDir() + "\_msrstrt.exe" Batch$ = GetWindowsDir() + "\_mssetup.bat" ' Exe$ = DEST$ + "\_msrstrt.exe" ' Batch$ = DEST$ + "\_mssetup.bat" empty$ = "" RESTART: IF RESTRT% = 0 THEN sz$ = UIStartDlg(CUIDLL$, RESTART, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO RESTART ENDIF I% = ExitExecRestart () RemoveFile Exe$, cmoForce RemoveFile Batch$, cmoForce END ELSE sz$ = UIStartDlg(CUIDLL$, RESTARTII, "FQuitDlgProc", 0, "") IF sz$ = "CONTINUE" THEN I% = ExitWindowsExec (Exe$, empty$) IF I% = 0 THEN GOTO RESTART ELSE END ENDIF ELSEIF sz$ = "EXIT" THEN UIPop 1 sz$ = UIStartDlg(CUIDLL$, FINALEXIT, "FInfo0DlgProc", 0, "") UIPopAll END ELSEIF sz$ = "REACTIVATE" THEN GOTO RESTART ELSE UIPop 1 END IF END IF END '************************************************************ '************************************************************ WING_SPACE_ERROR: sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO WING_SPACE_ERROR END IF UIPop 1 i% = DoMsgBox("Setup sources were corrupted!", "Setup Problem", MB_OK+MB_TASKMODAL+MB_ICONHAND) END '************************************************************